home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Disc to the Future 2
/
Disc to the Future Part II Programmer's Reference (Wayzata Technology)(6013)(1992).bin
/
MAC
/
MPW_TOOL
/
TOOLS
/
TOOLS_WI
/
ICON_8
/
CALLING_
/
ISTART.C
< prev
next >
Wrap
C/C++ Source or Header
|
1990-04-08
|
2KB
|
82 lines
/*
* Main program if Icon is called as a subprogram.
*/
#include "../h/config.h"
#include "../h/rt.h"
#include "rproto.h"
#ifdef IconCalling
novalue main(argc,argv)
int argc;
char *argv[];
{
int clargc;
char **clargv;
int i;
struct descrip darg;
/*
* Set up standard Icon interface. This is only necessary so that
* Icon can behave normally as if it were the main program.
* It is not necessary if Icon is called by a C program for another
* purpose.
*/
icon_setup(argc, argv, &i);
while (i--) { /* skip option arguments */
argc--;
argv++;
}
if (!argc)
error("no icode file specified");
/*
* Read in the icode file argv[1] and initialize the Icon system.
* This must be done for any C program calling Icon.
*/
icon_init(argv[1]);
/*
* Skip the names of the executable and the file it processes. This
* is necessary only to get the right arguments from the command line
* to call Icon as if it were the main program and hence provide
* the correct values in the list that is the argument of Icon's main
* procedure. This is not necessary if Icon is called from C for
* another purpose.
*/
clargv = argv + 2;
clargc = argc - 2;
/*
* Set up a temporary stack and build the necessary list
* to call main.
*/
sp = stack + Wsizeof(struct b_coexpr);
PushNull;
argp = (dptr)(sp - 1);
for (i = 0; i < clargc; i++) {
PushAVal(strlen(clargv[i]));
PushVal(clargv[i]);
}
Ollist(clargc, argp);
/*
* Now that the list is computed, copy its descriptor off the
* stack (which is about to be destroyed), reset the argument
* pointer, and make the call to the Icon main procedure.
*/
darg = *argp;
argp = 0;
icon_call("main", 1, &darg); /* return signal and value ignored */
c_exit(NormalExit);
}
#else /* IconCalling */
static char x; /* avoid empty module */
#endif /* IconCalling */